//
// Created by liushuai on 2021/2/16.
//

#include "sumOfLeftLeaves.h"
// bool isLeafNode(TreeNode* node) {
//     return !node->left && !node->right;
// }
//
// int sumOfLeftLeaves(TreeNode* root) {
//     if (!root) {
//         return 0;
//     }
//
//     queue<TreeNode*> q;
//     q.push(root);
//     int ans = 0;
//     while (!q.empty()) {
//         TreeNode* node = q.front();
//         q.pop();
//         if (node->left) {
//             if (isLeafNode(node->left)) {
//                 ans += node->left->val;
//             }
//             else {
//                 q.push(node->left);
//             }
//         }
//         if (node->right) {
//             if (!isLeafNode(node->right)) {
//                 q.push(node->right);
//             }
//         }
//     }
//     return ans;
// }

bool isLeaf(TreeNode *root) {
  if (root && !root->left && !root->right)
    return true;
  else
    return false;
}

int sumOfLeftLeaves(TreeNode *root) {
  if (!root)
    return 0;
  else {
    int value = 0;
    queue<TreeNode *> q;
    q.push(root);
    while (!q.empty()) {
      TreeNode *currentNode = q.front();
      q.pop();
      if (currentNode->left) {
        if (isLeaf(currentNode->left)) value += currentNode->left->val;

        q.push(currentNode->left);
      }
      if (currentNode->right) q.push(currentNode->right);
    }
    return value;
  }
}